//Chhol收发通信
/**************硬件连接****************
*     2端口 --->  指示灯
*     A0    --->  电位器
*     串口1 --->  Chhol模块
*    
*     程序收到包后，会根据包的数据打开或者关闭指示灯。
*     程序会每秒钟发送一个包，包的内容是A0采集到的模拟量。
*     具体介绍可以参考以下视频
*     【Arduino连接斥候程序介绍】 https://www.bilibili.com/video/BV17y4y1f79o/?share_source=copy_web&vd_source=d5aaafef9935770706f1564a13d791b9
*/

#include <Chhol.h>
using namespace Chhol;
ChholCmd cc_1;
uint8 Recv_buf[128];

sPkg* received(sPkg* received_pkg){
  Serial.print("addr= ");Serial.println(received_pkg->remote_addr,HEX);
  Serial.print("from= "); Serial.println(received_pkg->from_port);
  Serial.print("to= "); Serial.println(received_pkg->to_port);
  Serial.print("len= "); Serial.println(received_pkg->len);
  if(received_pkg->datas[0]==0){
    digitalWrite(2, LOW); 
  }else{
    digitalWrite(2, HIGH); 
  }
  return 0;
}


void setup() {
  Serial1.begin(115200);//启动一个串口，这个串口连接到Chhol模块
  cc_1.init(&Serial1,received,(sPkg*)Recv_buf);
  Serial.begin(115200);//启动另一个串口，用于打印测试信息
  pinMode(2, OUTPUT);
}

uint8 Send_buf[128];
void loop() {   
  while(cc_1.loop());//在循环中必须调用cc_1的循环程序，让通信器检查是否收到新的数据

  int sensorValue = analogRead(A0);//读取一次模拟量
  sPkg *send_pkg = (sPkg *) Send_buf;//构造数据包
  send_pkg->remote_addr =0x0000;
  send_pkg->from_port = 17;
  send_pkg->to_port = 32;
  send_pkg->datas[0] = (uint8)sensorValue;
  send_pkg->datas[1] = (uint8)(sensorValue>>8);
  send_pkg->len = 2;//写入长度，长度是datas的长度
  cc_1.send(send_pkg);//执行发送
  delay(1000);     
}
